/*
((1).toString().split('.')[1] || '').length;
获取数的位数
*/
export default {
  tailLen(v) {
    // 获取数的位数
    return (v.toString().split(".")[1] || "").length;
  },
  accAdd(arg1, arg2, round) {
    // 精确加法 round 默认不四舍五入
    let r1 = this.tailLen(arg1),r2 = this.tailLen(arg2),m;
    m = Math.pow(10, Math.max(r1, r2));
    return round? Math.round(arg1 * m + arg2 * m) / m: (arg1 * m + arg2 * m) / m;
  },
  accSub(arg1, arg2) {
    // 精确减法
    let r1 = this.tailLen(arg1), r2 = this.tailLen(arg2),m;
    m = Math.pow(10, Math.max(r1, r2));
    return ((arg2 * m - arg1 * m) / m).toFixed(r1 >= r2 ? r1 : r2);
  },
  accMul(arg1, arg2) {
    // 精确乘法
    var m = 0, m  =  this.tailLen(arg1) + this.tailLen(arg2) 
    return ( Number(arg1.toString().replace(".", "")) * Number(arg2.toString().replace(".", "")) / Math.pow(10, m) );
  },
  accDiv(arg1, arg2) {
    // 精确除法 
    let r1 = this.tailLen(arg1), r2 = this.tailLen(arg2);
    let t1 = Number(arg1.toString().replace(".", ""));
    let t2 = Number(arg2.toString().replace(".", ""));
    return t2 == 0 ? Infinity : t1 / t2 * Math.pow(10, r2 - r1);
  },
  fmtNumWithDot(str, dot = 2, empty = "0.00") {
    // 现代浏览器 千分位金额
    if (!str) return empty;
    return new Intl.NumberFormat("zn-ch", {
      minimumFractionDigits: dot,
      maximumFractionDigits: 10
    }).format(dot ? parseFloat(str).toFixed(dot) : str);
  },
  fmtNumWithDot(str, dot = 2, empty = "0.00") {
    // 千分位金额
    if (!str) return empty;
    return parseFloat(str)
      .toFixed(dot)
      .toString()
      .split("")
      .reverse()
      .join("")
      .replace(/(\d{3})/g, "$1,")
      .replace(/\,$/, "")
      .split("")
      .reverse()
      .join("");
  },
  getDecimal(val, dot = 2) {
    // 不四舍五入取n位小数
    return Number(
      val.toString().match(/^-?\d+(?:\.\d{0,dot})?/.source.replace("dot", dot))
    ).toFixed(dot);
  },
  round(n, decimals = 0) {
    // 四舍五入取n位小数
    return Number(`${Math.round(`${n}e${decimals}`)}e-${decimals}`);
  },
  isEven(num) {
    // 是否偶数
    return num % 2 === 0;
  },
  isInRange(a, b, inf, sup) {
    // b 是否在 a 的 inf,sup 百分比内  0.8 1.2,则为 正负20% 内
    return Math.abs(a) * inf < Math.abs(b) && Math.abs(b) < Math.abs(b) * sup;
  },
  randomLenNum(len, date) {
    // 生成随机len位数字
    let random = Math.ceil(Math.random() * 100000000000000)
      .toString()
      .substr(0, len || 4);
    if (date) random = random + Date.now();
    return random;
  }
};
